如今,在不断发展的数字领域中,对Web应用程序的需求持续增长。然而,传统的构建Web应用程序的过程往往需要相关的编程技能,这对那些没有编程背景的人来说构成了一道难题。即使有各种Web托管服务提供了Web开发人员的模板,但仍需通过添加独特的功能进行定制,更不用说复杂的调试环境了。
但是,如果有一种解决方案可以使任何人在不懂编程和主机设置的情况下轻松创建基本的Web应用程序会怎么样呢?通过利用像GPT-4这样的大型语言模型的人工智能能力,这样的解决方案变得非常简单。通过利用我所称之为 Text2WebApp 或 WebApp Generator 的应用程序的潜力,用户现在可以使用自然语言描述应用程序的元素、功能和外观来创建Web应用程序,这消除了对手动编码和调试的需求,使即使对编程知识了解不深的人也能进入Web应用程序开发的领域。
在本文中,我们将深入探讨这个应用程序的开发,探讨如何将Langchain、OpenAI和Streamlit组合在一起创建一个有用的Web开发助手。
请注意,尽管Python通常与AI和ML相关联,但Web开发社区在很大程度上依赖于JavaScript和Node.js。因此,我们的应用程序将被要求生成基于JavaScript的Web应用程序。
让我们先看一下该应用程序的用户界面,以便让你对其视觉效果有所了解。
a) 初始页面
用户只需在文本区域中输入他们的设计偏好,然后点击"创建!"按钮。仅需几秒钟,生成的应用程序将显示在左侧,并具有功能。用户可以自由使用它并查看它的工作方式!哦,如果结果和想象的不太一样,这在LLM的领域内很常见。再试一次,生成一个新的应用程序。源代码也会显示在用户输入下方,只需复制并粘贴到自己的应用程序中。
b) 生成的页面
在这个测试中,我要求生成器创建:
社交媒体仪表盘:开发一个类似谷歌风格的仪表盘应用程序,显示社交媒体指标,例如关注者数量、参与率和帖子表现。提供从5月到7月的关注者趋势条形图,数据范围从500到5000。使用这个标志作为账户的标志:https://about.twitter.com/content/dam/about-twitter/en/brand-toolkit/brand-download-img-1.jpg.twimg.1920.jpg。
另一个测试是基于创建一个日历的要求:
创建一个日历,具有Outlook样式的2023年7月的月视图,向中心扩展显示,每个日期都可以点击进行编辑,编辑后,内容将在日历上相应日期的框中显示,并带有突出的背景颜色。日历是透明的,并使用https://i.pinimg.com/originals/7d/fb/a8/7dfba87e011e436340836f89e86fb613.jpg作为背景图片。
结果看起来相当成熟:
为了更好地理解此应用程序中的信息流和操作流程,让我们深入了解其功能的块图。别担心,它非常简单。
应用程序设计指令被传递给模板,构建完整的查询提示为GPT-3.5-turbo
或GPT-4
模型。按照提示的指示,语言模型生成带有嵌入式CSS和JavaScript代码的HTML。最后一步是调用Streamlit的组件API,以在与用户交互的iFrame中执行此JavaScript代码。
现在,让我们逐步探索将此Text2WebApp生动呈现的代码工作流程。
LLMChain是Langchain系列中最典型的链,它增强了语言模型的功能。LLMChain由PromptTemplate和语言模型(模型或聊天模型之一)组成,它通过使用给定的输入值和可选的内存键值(如果可访问)来组织提示模板,然后将结构化的提示字符串转发给语言模型,并将模型的输出作为最终结果检索出来。
安装包:
!pip install langchain openai
导入模块并将OpenAI API密钥设置到环境中。
from langchain.chat_models import ChatOpenAI
from langchain import PromptTemplate, LLMChain
import os
os.environ["OPENAI_API_KEY"] = "{你的OpenAI密钥}"
定义一个保留用户输入部分的提示模板(永远是最重要的!)。
prompt_webapp_template = """
你是一名使用JavaScript的Web应用程序开发人员。
请根据用户要求"{text}"生成一个完整的JavaScript应用程序。
将js文件和css文件合并成一个html文件,该文件可以直接在服务器上运行。
如果没有指定CSS要求,请在你的响应中添加一个Amazon样式的CSS。
响应应仅包括html文件的内容。
HTML:
"""
PROMPT_WEBAPP = PromptTemplate(template=prompt_webapp_template,
input_variables=["text"])
使用LLM和提示模板创建链webapp_chain
。
llm = ChatOpenAI(temperature=0.5)
webapp_chain = LLMChain(llm=llm, prompt=PROMPT_WEBAPP, verbose=True)
和我的一些先前项目一样,我们将继续使用方便的Streamlit工具集来构建Web应用程序,以便于用户输入和各种输出交互。
安装包:
!pip install streamlit
使用st.session_state.html
初始化一个默认的HTML,用于缓存和在Web会话之间传输语言模型生成的HTML文本。
import streamlit as st
init_html = """
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<style>
h3 {
color: yellow;
}
</style>
</head>
<body>
<h3>Your APP will be displayed here.</h3>
</body>
</html>
"""
st.set_page_config(layout="wide")
if 'html' not in st.session_state:
st.session_state.html = init_html
创建columns
的小部件,将用户输入区域与应用程序显示区域分开。左列包含用于用户提示的text_area
、用于激活处理的button
和用于包装HTML源代码的code
。右列调用components
API在iframe中显示HTML字符串,并使其具有交互性。
import streamlit.components.v1 as components
col1, col2 = st.columns([0.5, 0.5], gap='medium')
with col1:
st.write("**你想让我创建什么样的Web应用程序?📝 **")
st.text_area("要求:", key='req')
st.button("创建!", on_click=generate)
st.code(st.session_state.html, language="typescript")
with col2:
components.html(st.session_state.html, height=600, scrolling=True)
定义一个名为generate()
的函数来处理button
的on_click
事件,这样当用户点击按钮时,LLMChain就可以被激活,根据text_area
中的文本生成HTML文本,然后更新st.session_state.html
字符串,以在iFrame中进行组件演示。
def generate():
requirement = st.session_state.req
if requirement != '':
st.session_state.html = webapp_chain.run(requirement)
print(st.session_state.html)
将上述所有代码整理并保存到Python文件"text2webapp.py"中,并运行命令:
!python -m streamlit run text2webapp.py
如果成功运行,你将在终端上打印出外部用户可以访问的具有默认端口的URL:
You can now view your Streamlit app in your browser.
Network URL: http://xxx.xxx.xxx.xxx:8501
External URL: http://xxx.xxx.xxx.xxx:8501
你的WebApp Generator现在已经准备好并能够有效地执行其任务。
这只是一个非常基础的演示应用程序,向你展示了如何使用Langchain和Streamlit开始你的AI应用程序开发。通过进一步的开发,它们可以被利用来创建更强大、适用于商业项目或个人助手的应用程序。